package com.test;

import com.spark.client.SparkClient;
import com.spark.client.config.SparkConfig;
import com.spark.client.exception.SparkClientException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import jakarta.annotation.Resource;

/**
 * Spring Boot 3.x 测试应用
 * 验证 SparkClient 在 Spring Boot 3.x 中的兼容性
 */
@SpringBootApplication
public class SpringBoot3TestApp implements CommandLineRunner {
    
    @Autowired
    private SparkClient sparkClient;
    
    @Resource
    private SparkConfig sparkConfig;

    public static void main(String[] args) {
        System.out.println("=== Spring Boot 3.x SparkClient 兼容性测试 ===");
        SpringApplication.run(SpringBoot3TestApp.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("\n=== 开始 Spring Boot 3.x 兼容性测试 ===");
        
        // 显示配置信息
        showConfiguration();
        
        // 测试依赖注入
        testDependencyInjection();
        
        // 测试简化方法
        testSimplifiedMethods();
        
        System.out.println("\n=== Spring Boot 3.x 兼容性测试完成 ===");
    }
    
    /**
     * 显示配置信息
     */
    private void showConfiguration() {
        System.out.println("\n--- Spring Boot 3.x 配置信息 ---");
        System.out.println("API Key: " + maskApiKey(sparkConfig.getApiKey()));
        System.out.println("模型: " + sparkConfig.getModel());
        System.out.println("最大 Tokens: " + sparkConfig.getMaxTokens());
        System.out.println("温度: " + sparkConfig.getTemperature());
        System.out.println("基础 URL: " + sparkConfig.getBaseUrl());
        System.out.println("启用日志: " + sparkConfig.getEnableLogging());
    }
    
    /**
     * 测试依赖注入
     */
    private void testDependencyInjection() {
        System.out.println("\n--- 测试 Spring Boot 3.x 依赖注入 ---");
        
        // 验证 @Resource 注入的 SparkConfig (Jakarta)
        if (sparkConfig != null) {
            System.out.println("✅ @Resource SparkConfig (Jakarta) 注入成功");
            System.out.println("  注入的配置 - 模型: " + sparkConfig.getModel());
            System.out.println("  注入的配置 - API Key: " + maskApiKey(sparkConfig.getApiKey()));
        } else {
            System.err.println("❌ @Resource SparkConfig (Jakarta) 注入失败");
        }
        
        // 验证 @Autowired 注入的 SparkClient
        if (sparkClient != null) {
            System.out.println("✅ @Autowired SparkClient 注入成功");
        } else {
            System.err.println("❌ @Autowired SparkClient 注入失败");
        }
    }
    
    /**
     * 测试简化方法
     */
    private void testSimplifiedMethods() {
        System.out.println("\n--- 测试 Spring Boot 3.x 简化方法 ---");
        
        try {
            // 测试 chatForContent 方法
            String content = sparkClient.chatForContent("你好，这是 Spring Boot 3.x 兼容性测试，请简短回复");
            System.out.println("✅ Spring Boot 3.x chatForContent 测试成功");
            System.out.println("问题: 你好，这是 Spring Boot 3.x 兼容性测试，请简短回复");
            System.out.println("回答: " + content);
            
        } catch (SparkClientException e) {
            System.err.println("❌ Spring Boot 3.x 简化方法测试失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 掩码 API Key 用于显示
     */
    private String maskApiKey(String apiKey) {
        if (apiKey == null || apiKey.length() < 8) {
            return "****";
        }
        return apiKey.substring(0, 4) + "****" + apiKey.substring(apiKey.length() - 4);
    }
}
